home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 17
/
CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso
/
CUCD
/
Programming
/
DiceSource
/
lib
/
extra
/
console.c
next >
Wrap
C/C++ Source or Header
|
1997-09-09
|
2KB
|
114 lines
/*
* CONSOLE.C
*
* (c)Copyright 1992-1997 Obvious Implementations Corp. Redistribution and
* use is allowed under the terms of the DICE-LICENSE FILE,
* DICE-LICENSE.TXT.
*
* OpenConsole() - set this process's console as far as we can do such
* things.
*/
#define DOSBase_DECLARED
#include <exec/types.h>
#include <exec/nodes.h>
#include <exec/ports.h>
#include <exec/alerts.h>
#include <dos/dos.h>
#include <dos/dosextens.h>
#include <dos/filehandler.h>
#include <clib/dos_protos.h>
#include <clib/exec_protos.h>
#include <clib/alib_protos.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <lib/misc.h>
#define BTOC(bptr) ((void *)((long)(bptr) << 2))
#define CTOB(cptr) ((BPTR)(((long)cptr) >> 2))
#define DOS_TRUE (-1)
#define DOS_FALSE (0)
#ifdef DEBUG
#define dbprintf(x) fhprintf x
#else
#define dbprintf(x)
#endif
typedef struct FileHandle FileHandle;
typedef struct Process Process;
typedef struct List List;
typedef struct MsgPort MsgPort;
typedef struct Message Message;
typedef struct CommandLineInterface CLI;
typedef struct Task Task;
static BPTR CustomCIS;
static BPTR CustomCOS;
static BPTR SaveCIS;
static BPTR SaveCOS;
static MsgPort *SaveConsoleTask;
extern struct DosLibrary *DOSBase;
__autoexit static
void
opencon_exit(void)
{
Process *proc = (Process *)FindTask(NULL);
if (CustomCIS || CustomCOS)
proc->pr_ConsoleTask = SaveConsoleTask;
if (CustomCIS) {
proc->pr_CIS = SaveCIS;
Close(CustomCIS);
CustomCIS = 0;
}
if (CustomCOS) {
Write(CustomCOS, "**END**\n", 8);
proc->pr_COS = SaveCOS;
Close(CustomCOS);
CustomCOS = 0;
}
}
BOOL
OpenConsole(str)
const char *str;
{
Process *proc = (Process *)FindTask(NULL);
FileHandle *fh;
BOOL r = FALSE;
opencon_exit();
if (CustomCIS = Open(str, 1005)) {
fh = BTOC(CustomCIS);
if (fh->fh_Type) {
r = TRUE;
SaveConsoleTask = proc->pr_ConsoleTask;
SaveCOS = proc->pr_COS;
SaveCIS = proc->pr_CIS;
proc->pr_ConsoleTask = fh->fh_Type;
proc->pr_COS = CustomCOS = Open("*", 1005);
proc->pr_CIS = CustomCIS;
freopen("*", "r", stdin);
freopen("*", "w", stdout);
freopen("*", "w", stderr);
/*proc->pr_ConsoleTask = SaveConsoleTask;*/
stdout->sd_Flags |= __SIF_IOLBF;
stderr->sd_Flags |= __SIF_IOLBF;
} else {
Close(CustomCIS);
CustomCIS = 0;
}
}
return(r);
}